package com.shen.webbf.mogondb;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import org.bson.Document;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import com.mongodb.MongoClient;
import com.mongodb.MongoClientURI;
import com.mongodb.ServerAddress;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;

/**
 * 说明：MongoDB测试
 * 
 * @author shenhx
 * @date 2017年7月8日
 */
public class MongoDBTest {

	MongoClient mongoClient;
	MongoDatabase database;
	MongoCollection<Document> collection;
	
	@Before
	public void testBefore(){
		mongoClient = new MongoClient();// 用默认的
		database = mongoClient.getDatabase("mydb");
		collection = database.getCollection("test");
	}
	
	@After
	public void testAfter(){
		mongoClient.close();
	}
	
	/**
	 * 说明：测试连接
	 * @author shenhx
	 * @date 2017年7月8日
	 */
	public void mongodbTestClient(){
		// 简单直接的连接数据库，默认为本机地址localhost，端口号27017
				// MongoClient mongoClient = new MongoClient();

				// 或者像这样指定连接地址
				// MongoClient mongoClient = new MongoClient("localhost");

				// 或者像这样指定连接地址和端口号
				// MongoClient mongoClient = new MongoClient("localhost", 27017);

				// 或者像这样连接到一个副本集，需要提供一个列表
				// MongoClient mongoClient = new MongoClient(Arrays.asList(new
				// ServerAddress("localhost", 27017),
				// new ServerAddress("localhost", 27018), new ServerAddress("localhost",
				// 27019)));

				// 或者使用连接字符串
				// MongoClientURI connectionString = new MongoClientURI(
				// "mongodb://localhost:27017,localhost:27018,localhost:27019");
				// MongoClient mongoClient = new MongoClient(connectionString);

				//上面的任选一种方式，然后，创建  mydb。
				// 获取到数据库对象mydb，如果不存在则自动创建
				//MongoDatabase database = mongoClient.getDatabase("mydb");
	}
	
	/**
	 * 说明：测试放入集合
	 * 
	 * 补充一：一个MongoClient实例实际上表示的是一个数据库连接池，即使是多线程，你也只需要一个MongoClient类的实例。
	 * 
	 * @author shenhx
	 * @date 2017年7月8日
	 */
	@Test
	public void mongodbTest001() {

		// 获取一个集合来进行更多操作，需要为getCollection()方法指定一个集合的名称。
		MongoCollection<Document> collection = database.getCollection("test");

		// 使用java驱动程序中的Document类来创建文档，你同样也可以使用这个类来创建嵌入式的文档。
		Document doc = new Document("name", "MongoDB").append("type", "database").append("count", 1).append("info",
				new Document("x", 203).append("y", 102));

		// 使用insertOne()方法来向集合中插入文档
		collection.insertOne(doc);

		List<Document> documents = new ArrayList<Document>();
		for (int i = 0; i < 100; i++) {
			documents.add(new Document("i", i));
		}

		collection.insertMany(documents);

		// 统计数量
		System.out.println(collection.count());
	}
	
	@Test
	public void mongodbTest002() {
		Document myDoc = collection.find().first();  
		System.out.println(myDoc.toJson());  
	}


}
